package ge.telasi.tasks.fixture;

import ge.telasi.tasks.PersistenceUtils;
import ge.telasi.tasks.controller.UserController;
import ge.telasi.tasks.model.Structure;
import ge.telasi.tasks.model.User;
import ge.telasi.tasks.model.copy.UserCopy;
import java.util.HashMap;
import java.util.Map;
import javax.persistence.EntityManager;

/**
 * @author dimitri
 */
public class UserFixture extends Fixture<User> {
    public static final String DIMITRI = "dimitri";
    public static final String ADMIN = "admin";
    public static final String NINO = "nino";
    public static final String GIA = "gia";
    public static final String SHALVA = "shalva";
    public static final String TAMRIKO = "tamarv";
    public static final String MAKA = "maka";
    private User admin;

    @Override
    protected Map<String, User> execute(EntityManager em) {
        Structure it = new StructureFixture().getEntity(em, StructureFixture.IT_DEP);
        Structure prog = new StructureFixture().getEntity(em, StructureFixture.PROG_DIV);
        User dimitri = createUser(em, prog, "dimitri", "dima123", "დიმიტრი", "ყურაშვილი",
                "Дмитрий", "Курашвили", "3015", "პროგრამისტი", "ცენტრ. ფილიალი, მე-3 სართ.",
                "895335514", "868", "dimakura@gmail.com");
        User nino = createUser(em, prog, "nino", "nino123", "ნინო", "გვაზავა",
                "Нино", "Гвазава", "0069", "ჯგუფის უფროსი", "ცენტრ. ფილიალი, მე-3 სართ.",
                "895123456", "454", "nino.gvazava@telasi.ge");
        User gia = createUser(em, prog, "gia", "gia123", "გია", "კურატაშვილი",
                "Гия", "Кураташвили", "0743", "პროგრამისტი", "ცენტრ. ფილიალი, მე-3 სართ.",
                "895222144", "555", "gia.kuratashvili@telasi.ge");
        User shalva = createUser(em, it, "shalva", "shalva123", "შალვა", "ესაკია",
                "Шалва", "Эсакия", "0712", "დეპარტამენტის უფროსი", "ცენტრ. ფილიალი, მე-3 სართ.",
                "899555777", "999", "shalva.esakia@telasi.ge");
        User tamriko = createUser(em, it, "tamarv", "tamarv", "თამარ", "ვარსიმაშვილი",
                "Тамар", "Варсимашвили", "3638", "პროცედურების სპეციალისტი",
                "ცენტრ. ფილიალი, მე-3 სართ.",
                "899555777", "868", "t.varsimashvili@telasi.ge");
        User maka = createUser(em, prog, "maka", "maka123", "მაკა", "მეგენეიშვილი",
                "Мака", "Мегенеишвили", "0084", "პროგრამისტი", "ცენტრ. ფილიალი, მე-3 სართ.",
                "895717197", "867", "maka.megeneishvili@telasi.ge");
        Map<String, User> users = new HashMap<String, User>();
        users.put(DIMITRI, dimitri);
        users.put(ADMIN, dimitri);
        users.put(NINO, nino);
        users.put(GIA, gia);
        users.put(SHALVA, shalva);
        users.put(TAMRIKO, tamriko);
        users.put(MAKA, maka);
        return users;
    }

    public User createUser(EntityManager em, Structure parent, String username, String password,
            String firstname, String lastname, String firstname2, String lastname2,
            String code, String position, String location, String mobile,
            String workPhone, String email) {
        User user = new User();
        user.setStructure(parent);
        user.setUsername(username);
        user.setFirstName(firstname);
        user.setLastName(lastname);
        user.setFirstName2(firstname2);
        user.setLastName2(lastname2);
        user.setCode(code);
        user.setPosition(position);
        user.setLocation(location);
        user.setMobile(mobile);
        user.setWorkPhone(workPhone);
        user.setEmail(email);
        PersistenceUtils.beginTransaction(em);
        user = new UserController().register(em, user, password);
        if (user.isNew()) {
            user = new UserCopy().createClone(user);
            user.setNew(false);
            new UserController().updateUserByAdmin(em, this.admin, user);
        }
        if (user.isAdmin()) {
            this.admin = user;
        }
        PersistenceUtils.endTransaction(em);
        return user;
    }

}
